Sesión 2

Curso: R para usuarios de Stata


Percy Soto-Becerra, M.D., M.Sc(c)

InkaStats Academy | Medical Branch

2023

https://github.com/psotob91

Datos en R

Datos en R

Conjunto de datos rectangular


  • En investigación, las bases de datos se organizan en tablas rectangulares estructuradas.

    • Cada fila es una observación
    • Cada columna es una variable

Adaptado de Smit Aj, Abrahams A & Schlegel RW. Intro R Workshop: Data Manipulation, Analysius, and Visualization.

Datos en Stata y R


  • Con el comando oficial frame, Stata también puede trabajar con múltiples data frames (Más info aquí)

  • Uno puede observar y manipular un solo data frame a la vez.

    • Tiene que estar cambiando de frame constantemente.

  • R tiene varios tipos de base de datos rectangulares:

    • data.frames, data tibbles, data.tables, etc…
  • Puede manipular todos a la vez en una sola sesión.

  • No tiene que estar cambiando de vista de una base de datos a otra.

data.tibble versus data.frame


  • Los data.tibble también son data.frame, pero con algunos poderes adicionales.

Así se ve un data tibble

head(covid_testing)
# A tibble: 6 × 4
  subject_id fake_first_name fake_last_name gender
       <dbl> <chr>           <chr>          <chr> 
1       1412 jhezane         westerling     female
2        533 penny           targaryen      female
3       9134 grunt           rivers         male  
4       8518 melisandre      swyft          female
5       8967 rolley          karstark       male  
6      11048 megga           karstark       female
  • Notar que los data.tibble son data.frame aumentados:
class(covid_testing)
[1] "tbl_df"     "tbl"        "data.frame"

Y así un data frame

head(covid_testing, 8)
  subject_id fake_first_name fake_last_name gender
1       1412         jhezane     westerling female
2        533           penny      targaryen female
3       9134           grunt         rivers   male
4       8518      melisandre          swyft female
5       8967          rolley       karstark   male
6      11048           megga       karstark female
7        663          ithoke      targaryen   male
8       2158         ravella           frey female
  • Los data.frame son solo eso, data.frame:
class(covid_testing)
[1] "data.frame"

Vectores como átomos de R


  • Vectores se limitan a un solo tipo de dato.

  • Conforman diversas estructuras: matrices, arreglos, listas, etc.

  • Usaremos principalmente data frames y data tibbles.

  • Los data frames y tibbles:

    • Son columnas de vectores.

    • Cada vector puede ser de distinto tipo.

  • Los data frames y tibbles:

    • Almacenan más de un tipo de dato: integer, double, character, logic, factor, etc.

¿De qué están hechos los data.frame y data.tibble?


  • Sus unidades básicas son los vectores: colecciones de datos de un solo tipo:
Tipo de dato (En inglés) Descripción Ejemplo
Entero Integer Solo números enteros c(1, 2, 3, 4)
Doble Double Números c(1, 2.4, 3.14, 4)
Caracter Character Texto o cadenas (‘strings’) c(‘1’, ‘azul’, ‘divertido’, ‘monstruo’)
Lógicos Logical Verdadero o Falso c(TRUE, FALSE, TRUE, FALSE)
Factor Factor Categorías c(‘Muy intenso’, ‘Leve’, ‘Moderado’, ‘Leve’)

Equivalencias de estructuras de datos

  • R y Stata tienen estructuras parecidas en algún sentido
R Stata
Integer byte
Integer int
Integer long
Double float
Double double
Character str
Logical No tiene equivalente
Factor Equivale a cualquier byte, int, long pero CON etiqueta (label)

Vectores y data frame / data tibble en R


Datos factor

  • Son vectores enteros aumentados por etiquetas.

  • Se comportan de manera similar a Stata.

    • Recuerden: Stata no puede operar con strings (cadenas)
    • Opera solo con números, por lo que las variables categóricas son estructuras numéricas con etiquetas (label values)
  • R sí puede operar con datos string (character).

    • Los datos factor no son necesarios estrictamente hablando.
    • Pero pueden ser convenientes a veces (p. ej., gráficos)
  • Código en R:

factor(sexo, levels = c(1, 2), labels = c("Male", "Female"))

Datos perdidos

  • Los datos perdidos son números infinitos representados por un punto .

  • Hay infinitos más grandes que otros. Stata lo sabe:

    • .a, .b, .c, …
    • Donde . < .a < .b < .c
  • Los infinitos al operarse aritméticamente con otros valores vuelven infinito el resultado (dato perdido).

  • En R, los datos perdidos son representados como NA, los cuales no son números.

    • NA = “not available”
    • Son boleanos.
  • El operar con un NA puede crear un NA o resultar en error.

Otros valores especiales

  • Stata no maneja otros valores especiales.

  • R también maneja infinitos y otro tipo de valores "especiales":

    • -Inf, Inf, NaN
  • Inf y -Inf: números demasiado grandes o pequeños.

  • NaN: “not at number” (indeterminado o sin sentido)

  • Son los únicos boleanos que pueden estar dentro de vectores de otro tipo no lo coercionan.

¿Cómo podemos ver qué hay en los conjuntos de datos?


Podemos hechar un vistazo (glimpse en inglés) a los datos:

glimpse(covid_testing)
Rows: 15,524
Columns: 17
$ subject_id      <dbl> 1412, 533, 9134, 8518, 8967, 11048, 663, 2158, 3794, 4…
$ fake_first_name <chr> "jhezane", "penny", "grunt", "melisandre", "rolley", "…
$ fake_last_name  <chr> "westerling", "targaryen", "rivers", "swyft", "karstar…
$ gender          <chr> "female", "female", "male", "female", "male", "female"…
$ pan_day         <dbl> 4, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 1…
$ test_id         <chr> "covid", "covid", "covid", "covid", "covid", "covid", …
$ clinic_name     <chr> "inpatient ward a", "clinical lab", "clinical lab", "c…
$ result          <chr> "negative", "negative", "negative", "negative", "negat…
$ demo_group      <chr> "patient", "patient", "patient", "patient", "patient",…
$ age             <dbl> 0.0, 0.0, 0.8, 0.8, 0.8, 0.8, 0.8, 0.0, 0.0, 0.9, 0.9,…
$ drive_thru_ind  <dbl> 0, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, …
$ ct_result       <dbl> 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45…
$ orderset        <dbl> 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, …
$ payor_group     <chr> "government", "commercial", NA, NA, "government", "com…
$ patient_class   <chr> "inpatient", "not applicable", NA, NA, "emergency", "r…
$ col_rec_tat     <dbl> 1.4, 2.3, 7.3, 5.8, 1.2, 1.4, 2.6, 0.7, 1.0, 7.1, 2.5,…
$ rec_ver_tat     <dbl> 5.2, 5.8, 4.7, 5.0, 6.4, 7.0, 4.2, 6.3, 5.6, 7.0, 3.8,…

¿Cómo obtener más información?


  • Como los datos provienen de un paquete en R, se puede usar la función de ayuda ?
?covid_testing

  • Número de filas:
nrow(covid_testing)
[1] 15524
  • Número de columnas:
ncol(covid_testing)
[1] 17
  • Número de filas y columnas:
dim(covid_testing)
[1] 15524    17

Nuestro turno


  • Cree una carpeta de trabajo llamada taller_02.
  • Configure el proyecto.
  • Exploremos los distitntos tipos de datos.


30:00

Lidiando con conjunto de datos

Lidiando con conjunto de datos

Importar datos de fuentes externas a R


El paquete {rio} es la navaja suiza
 de la importación de datos en R.

          Su función import
          permite importar
          prácticamente
          cualquier formato.

Importando datos con {rio}


  • {rio} debe instalarse de una manera especial

  • Pasos:

    1. Primero se instala como siempre, usando install.packages
    2. Adicionalmente, se sugiere correr install_formats. inmediatamente después de la primera instalación.
    3. Se carga el paquete usando library.
library(rio)
  • Se usa import() para importar nuevos datos y <- para asignar los datos a un nuevo data.frame
nuevos_datos <- import(file = "datos.fmt")


Podemos omitir los nombres de los argumentos cuando utilizamos funciones.


Con argumento file=

nuevos_datos <- import(file = "datos.fmt")

Sin argumento file=

nuevos_datos <- import("datos.fmt")
  • Para archivos de tipo *.csv o *.txt

  • No importa el tipo de separación de las columnas: comas, puntos y comas, otros caracteres.

    • import() determinará rápidamente el tipo de separación y hará el trabajo.
datos_csv <- import("gapminder.csv")
head(datos_csv)
              country year infant_mortality life_expectancy fertility
1             Albania 1960           115.40           62.87      6.19
2             Algeria 1960           148.20           47.50      7.65
3              Angola 1960           208.00           35.98      7.32
4 Antigua and Barbuda 1960               NA           62.97      4.43
5           Argentina 1960            59.87           65.39      3.11
6             Armenia 1960               NA           66.86      4.55
  • Útil para archivos con las extensiones *.xls o *.xlsx
datos_xlsx <- import("gapminder.xlsx")
head(datos_xlsx)
              country year infant_mortality life_expectancy fertility
1             Albania 1960           115.40           62.87      6.19
2             Algeria 1960           148.20           47.50      7.65
3              Angola 1960           208.00           35.98      7.32
4 Antigua and Barbuda 1960               NA           62.97      4.43
5           Argentina 1960            59.87           65.39      3.11
6             Armenia 1960               NA           66.86      4.55
  • Permite importar datos de formato Stata. Sin embargo, en Stata, los valores de las variables suelen estar etiquetados, por lo que es importante también recuperar esta información.

  • Si importamos una tabla de datos en formato Stata, vemos que algunas variables categóricas como married o married2 se importan como números. ¿Qué significa 1 o 0?

datos_dta <- import("gapminder.dta")
head(datos_dta)
  country year infant_mortality life_expectancy fertility
1       1 1960           115.40           62.87      6.19
2       2 1960           148.20           47.50      7.65
3       3 1960           208.00           35.98      7.32
4       4 1960               NA           62.97      4.43
5       5 1960            59.87           65.39      3.11
6       6 1960               NA           66.86      4.55
  • Lo mismo que ocurre con Stata, sucede con SPSS: los metadatos se pierden.
datos_sav <- import("gapminder.sav")
head(datos_sav)
  country year infant_mortality life_expectancy fertility
1       1 1960           115.40           62.87      6.19
2       2 1960           148.20           47.50      7.65
3       3 1960           208.00           35.98      7.32
4       4 1960               NA           62.97      4.43
5       5 1960            59.87           65.39      3.11
6       6 1960               NA           66.86      4.55
  • La función import soporta una gran variedad de formatos.

  • Si alguna vez necesita, puede consultar la web del paquete y encontrará tutoriales de cómo importar los formatos que requiera.

https://thomasleeper.com/rio/index.html

Abrir conjunto de datos


import delimited “filepath.csv, clear

import(“filepath.csv)

import delimited “filepath.txt, clear

import(“filepath.txt)

import excel “filepath.xlsx, clear

import(“filepath.xlsx)

use “filepath.dta, clear

import(“filepath.dta)

import spss “filepath.sav, clear

import(“filepath.sav)

import sas “filepath.sas7bdat, clear

import(“filepath.sas7bdat)

/* No posible aún */

import(“filepath.rda)

/* No posible aún */

import(“filepath.rds)

¿Cómo importar metadatos de Stata o SPSS?


  • Son los datos de los datos.

  • Dos metadatos bastante usados son:

    • Etiquetas de la variable

    • Etiquetas de los valores de la variable

Importar datos Stata solo con import()

  • Las etiquetas de valor para time, treat, married y married2 se pierden.
datos_dta <- import("gapminder.dta")

head(datos_dta)
  country year infant_mortality
1       1 1960           115.40
2       2 1960           148.20
3       3 1960           208.00
4       4 1960               NA
5       5 1960            59.87
6       6 1960               NA

Usar import() más characterize()

  • Las etiquetas de valor para time, treat, married y married2 se recuperan
datos_dta <- import("gapminder.dta") %>% 
  characterize()
head(datos_dta)
              country year infant_mortality
1             Albania 1960           115.40
2             Algeria 1960           148.20
3              Angola 1960           208.00
4 Antigua and Barbuda 1960               NA
5           Argentina 1960            59.87
6             Armenia 1960               NA

Importar datos SPSS solo con import()

  • Las etiquetas de valor para time, treat, married y married2 se pierden.
datos_sav <- import("gapminder.sav")

head(datos_sav)
  country year infant_mortality
1       1 1960           115.40
2       2 1960           148.20
3       3 1960           208.00
4       4 1960               NA
5       5 1960            59.87
6       6 1960               NA

Usar import() más characterize()

  • Las etiquetas de valor para time, treat, married y married2 se recuperan
datos_sav <- import("gapminder.sav") %>% 
  characterize()
head(datos_sav)
              country year infant_mortality
1             Albania 1960           115.40
2             Algeria 1960           148.20
3              Angola 1960           208.00
4 Antigua and Barbuda 1960               NA
5           Argentina 1960            59.87
6             Armenia 1960               NA

Exportando datos con {rio}


  • Se usa export() para exportar un objeto data frame o data tibble a otro formato:
export(datos_para_importa, file = "datos_exportados.fmt")
  • Los formatos pueden ser:
Formato Extensión típica
Comma-separated data .csv
Pipe-separated data .psv
Tab-separated data .tsv
CSVY (CSV + YAML metadata header) .csvy
SAS .sas7bdat
SPSS .sav
SPSS (compressed) .zsav
Stata .dta
SAS XPORT .xpt
SPSS Portable .por
Excel .xls
Excel .xlsx
R syntax .R
Saved R objects .RData, .rda
Serialized R objects .rds
Epiinfo .rec
  • A formato .rds (sugerido para guardar base de datos individuales en R):
export(datos, "datos.rds")
  • A formato .xlsx:
export(datos, "datos.xlsx")
  • A formato .csv:
export(datos, "datos.csv")
  • A formato .dta:
export(datos, "datos.dta")
  • A formato .sav:
export(datos, "datos.sav")

Exportar conjunto de datos


export delimited “filepath.csv, clear

export(“filepath.csv)

export delimited “filepath.txt, clear

export(“filepath.txt)

export excel “filepath.xlsx, clear

export(“filepath.xlsx)

use “filepath.dta, clear

export(“filepath.dta)

export spss “filepath.sav, clear

export(“filepath.sav)

export sas “filepath.sas7bdat, clear

export(“filepath.sas7bdat)

export sas “filepath.rda, clear

export(“filepath.rda)

export sas “filepath.rds, clear

export(“filepath.rds)

Nuestro turno


  • En la misma carpeta taller_02, copie todos los datos compartidos.

  • Importe los datos.

  • Ahora cree una subcarpeta Datos y copie todos los datos.

  • Importe los datos usando como ruta la subcarpeta Datos.

  • Exporte los datos a formato de R.


30:00

Principios del manejo de datos con {dplyr}

Principios del manejo de datos con {dplyr}

El operador Pipe


En programación, un pipe es una técnica para transmitir información de un proceso a otro.

  • En R, hay dos operadores pipe:

    • pipe de tidyverse: %>%

    • pipe nativo (de R base):|>

  • En este curso, usaremos el pipe de tidyverse: %>%

  • El operador pipe de tidyverse es del paquete {magrittr}, que no necesita ser cargado si es que se carga {tidyverse}.

%>% en acción


Este operador conecta secuencia de acciones en forma de código:

yo
despierto a las
salgo de cama por el
visto y
salgo de casa con sin

yo %>% 
  despertar(tiempo = "8:00") %>% 
  salir_de_cama(lado = "derecha") %>% 
  vestir(pantalones = TRUE, polo = TRUE) %>% 
  salir_de_casa(carro = TRUE, bicicleta = TRUE)

Atajo de teclado del operador pipe:

  • Ctrl + Shift + M

  • Ctrl + + M

Un ejemplo de uso de %>%


Sin %>%:

datos_fase1 <- import("maca_meno_fase1.dta") 
datos_fase1 <- characterize(datos_fase1)
  • El código es redundante: repites tres veces datos_fase1.
head(datos_fase1)
  id     time   treat age
1  1 Baseline Placebo  33
2  1 3 months Placebo  32
3  2 Baseline Dosis 2  27
4  2 3 months Dosis 2  27
5  3 Baseline Dosis 1  25
6  3 3 months Dosis 1  25

Con %>%:

datos_fase1 <- import("maca_meno_fase1.dta") %>% 
  characterize()
  • El código es más simple y directo, datos_fase1 solo se repite una vez.
head(datos_fase1)
  id     time   treat age
1  1 Baseline Placebo  33
2  1 3 months Placebo  32
3  2 Baseline Dosis 2  27
4  2 3 months Dosis 2  27
5  3 Baseline Dosis 1  25
6  3 3 months Dosis 1  25

El paquete {dplyr}


  • El paquete {dplyr} es una ‘suite’ de funciones para manipular data frame.
Verbos Función
Extrae filas con filter()
Extrae columnas con select()
Reordena filas con arrange()
Crea nuevas / remplaza columnas con mutate
Haz resumenes agrupados con group_by() y summarize()

‘Verbo’ típico de {dplyr}


  • Cualquier función de {dplyr} se caracteriza por:

Ingresa data.frame Sale data.frame | Ingresa data.tibble Sale data.tibble

  • La estructura de todos los ‘verbos’ de {dplyr} es la misma:

Larga

verbo(.data = DATA, ...)

Abreviada

verbo(DATA, ...)

Se estila usar %>%

DATA %>% 
  verbo(...)
Argumento Descripción
.data Data frame o extensión de data frame (por ejemplo, tibble).
... Una o más argumentos o expresiones.

Operadores lógicos con R


Operador Definición Operador Definición
< menor que A | B A o B
<= menor o igual que is.na(A) evalúa si A es NA
> mayor que !is.na(A) evalúa si A no es NA
>= mayor o igual que A %in% B evalúa si A está en B
== exactamente igual a !(A %in% B) evalúa si A no está en B
!= diferente de !A no A
A & B A y B

Nuestro turno


  • En la misma carpeta, practiquemos como funciona el operador %>%.

  • Juguemos con las funciones round() y mean().

30:00

Hagamos una pausa


Tomemos un descanso de 5 minutos

Estire las piernas

Deje de ver las pantallas

… cualquier , las del celular también.

05:00

Manipulación de columnas

Manipulación de columnas

Datos COVID-19 vacunas


  • Usaremos datos simulados de un estudio de vacunas COVID-19.
datos_vac <- import("vacunas_covid_peru.dta") %>% 
  characterize()
  • Un vistazo:
datos_vac %>% 
  glimpse()
Rows: 10,000
Columns: 14
$ edad                 <dbl> 44, 34, 40, 54, 40, 31, 67, 31, 43, 22, 39, 9, 34…
$ muerte_covid         <chr> "Not COVID death", "Not COVID death", "Not COVID …
$ pcr_fecha            <chr> "22848", "22823", "22832", "22851", "22853", "227…
$ fecha_muerte         <date> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
$ fecha_vacuna1        <date> 2021-08-07, 2021-09-05, 2021-02-11, 2021-07-15, …
$ fecha_vacuna2        <date> 2021-08-28, 2021-10-01, 2021-03-03, 2021-08-07, …
$ fecha_vacuna3        <date> 2021-12-27, 2022-03-27, 2021-10-19, 2022-01-08, …
$ fecha_vacuna4        <chr> "22842", ".", ".", "22803", ".", ".", ".", ".", "…
$ infeccion_previa     <chr> "No Previous infection", "No Previous infection",…
$ id                   <chr> "73443", "59321", "105426", "24757", "65139", "68…
$ region               <chr> "Ucayali", "Lima", "Cusco", "San Martin", "Piura"…
$ fin_periodo_fecha    <chr> "22jul2022", "27jun2022", "06jul2022", "25jul2022…
$ inicio_periodo_fecha <chr> "07may2022", "07may2022", "07may2022", "07may2022…
$ sexo                 <chr> "Female", "Female", "Female", "Male", "Female", "…

Los datos de vacunas


Seleccionar columnas


keep edad sexo

select(datos_vac, edad, sexo) # dplyr sin pipe

datos_vac %>% select(edad, sexo) # dplyr con pipe

datos_vac %>%
  select(edad, sexo) # pipe y buena práctica de estilo

Seleccionar columnas


keep edad sexo

select(datos_vac, edad, sexo) # dplyr sin pipe

datos_vac %>% select(edad, sexo) # dplyr con pipe

datos_vac %>%
  select(edad, sexo) # pipe y buena práctica de estilo

Atajos para seleccionar columnas


  • Stata ofrece comodines o wildcards como atajos de código para seleccionar columnas.

  • En R, {tidyverse} ofrece funciones auxiliares o helpers que tienen la misma función que los comodines de Stata.

keep fecha_vacuna*

datos_vac %>%
 select(starts_with(“fecha_vacuna”))

Atajos para seleccionar columnas


  • Stata ofrece comodines o wildcards como atajos de código para seleccionar columnas.

  • En R, {tidyverse} ofrece funciones auxiliares o helpers que tienen la misma función que los comodines de Stata.

keep fecha_vacuna*

datos_vac %>%
 select(starts_with(“fecha_vacuna”))

Atajos para seleccionar columnas


keep v*

datos_vac %>%
 select(starts_with(“fecha_vacuna”))

keep *v

datos_vac %>%
 select(ends_with(“fecha_vacuna”))

keep *v*

datos_vac %>%
 select(contains(“fecha_vacuna”))

keep v?

datos_vac %>%
 select(matches(“fecha_vacuna”))

keep *

datos_vac %>%
 select(everything())

drop fecha_vacuna

datos_vac %>%
 select(-fecha_vacuna)

keep edad-fecha_vacuna1

datos_vac %>%
 select(edad:fecha_vacuna1)

Eliminar columnas


drop edad sexo

select(-datos_vac, -edad, -sexo) # dplyr sin pipe

datos_vac %>% select(-edad, -sexo) # dplyr con pipe

datos_vac %>%
  select(-edad, -sexo) # pipe y buena práctica de estilo

Renombrar columnas


  • Se puede renombrar a la columna mediante el comando rename.
  • 1 nombre antiguo 2 nombre nuevo.

  • Se puede renombrar a la columna mediante la función rename() de {dplyr}.
  • 1 nombre nuevo 2 nombre antiguo.

rename region departamento

datos_vac %>%
 rename(departamento = region)

Renombrar varias columnas







  • Un rename por renombre.

  • Genera código redundante.




  • Un solo rename().

  • Código menos redudante.




rename region departamento

rename muerte_covid muerte

rename fecha_vacuna1 fech_vac1

datos_vac %>%
  rename(departamento = region,
         muerte = muerte_covid,
         fech_vac1 = fecha_vacuna1)

Reordenar columnas


  • Se usa el comando order:

    • Varios argumentos controlan el proceso
    • first (por defecto), before, after, …

  • Con {dplyr} hay dos opciones:

    • select()
    • relocate()

order id /* Equivale: order id, first */

datos_vac %>%
 select(id, everything())

order id sexo edad muerte_covid

datos_vac %>%
 select(id, sexo, edad, muerte_covid, everything())

order fecha_muerte, before(infeccion_previa)

datos_vac %>%
 relocate(id, .before = infeccion_previa)

order fecha_muerte, after(fecha_vacuna4)

datos_vac %>%
 relocate(id, .after = fecha_vacuna4)

Crear nueva columna


  • El comando generate crea columnas nuevas en Stata.
  • 1 nombre nuevo 2 valor o regla.

  • La función mutate() de {dplyr} equivale a generate.
  • 1 nombre nuevo 2 valor o regla.

gen nueva_variable = 1

datos_vac %>%
 mutate(nueva_variable = 1)

Crear varias columnas







  • Un generate por renombre.

  • Genera código redundante.




  • Un solo mutate().

  • Código menos redudante.




gen nueva_variable1 = 1

gen nueva_variable2 = “1”

gen nueva_variable3 = “prueba”

datos_vac %>%
  mutate(nueva_variable1 = 1,
         nueva_variable2 = “1”,
         nueva_variable3 = “prueba”)

Modificar solo ciertas filas de una columna


  • El comando replace modifica columnas en Stata.

  • La función mutate() de {dplyr} también equivale a replace.

replace sexo = “0” if sexo == “Female”

datos_vac %>%
  mutate(sexo = case_when(sexo == “Female” ~ “0”,
                          TRUE ~ sexo))

Nuestro turno



  • En la misma carpeta, con la data gapminder.

  • Seleccione columnas.

  • Elimine columnas.

  • Renombre columnas.

  • Reordene columnas

  • Cree nuevas columnas.



 

10:00

Crear una variable en base a una condición





gen sexo2 = .



datos_vac %>%
  mutate(sexo2 = case_when()

Crear una variable en base a una condición





gen sexo2 = .
replace sexo2 = 0 if sexo == “Female”


datos_vac %>%
  mutate(sexo2 = case_when(
    sexo== “Female” ~ 0
    )
  )

Crear una variable en base a una condición





gen sexo2 = .
replace sexo2 = 0 if sexo == “Female”
replace sexo2 = 1 if sexo == “Male”

datos_vac %>%
  mutate(sexo2 = case_when(
    sexo == “Female” ~ 0,
    sexo== “Male” ~ 1
    )
  )

Crear una variable en base a una condición





gen sexo2 = .
replace sexo2 = 0 if sexo == “Female”
replace sexo2 = 1 if sexo == “Male”

datos_vac %>%
  mutate(sexo2 = case_when(
    sexo == “Female” ~ 0,
    sexo == “Male” ~ 1,
    TRUE ~ as.numeric(NA)
    )
  )

Siempre debe indicarse qué hacer cuando la condición no se cumple!!

Crear una variable en base a una condición





gen sexo2 = .
replace sexo2 = 0 if sexo == “Female”
replace sexo2 = 1 if sexo == “Male”

datos_vac %>%
  mutate(sexo2 = case_when(
    sexo == “Female” ~ 0,
    sexo == “Male” ~ 1,
    TRUE ~ as.numeric(NA)
    )
  )

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .




datos_vac %>%
  mutate(edad_cat = case_when())

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .
replace edad_cat = 1 if edad < 35

 

datos_vac %>%
  mutate(edad_cat = case_when(
                              edad< 35 ~ 1
                            ))

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .
replace edad_cat = 1 if edad < 35
replace edad_cat = 2 if edad >= 35 & edad < 60


datos_vac %>%
  mutate(edad_cat = case_when(
                              edad < 35 ~ 1,
                              edad>= 35 & edad < 60 ~ 2
                            ))

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .
replace edad_cat = 1 if edad < 35
replace edad_cat = 2 if edad >= 35 & edad < 60
replace edad_cat = 3 if edad >= 60 & edad < .

datos_vac %>%
  mutate(edad_cat = case_when(
                              edad < 35 ~ 1,
                              edad >= 35 & edad < 60 ~ 2,
                              edad>= 60 ~ 3
                            ))

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .
replace edad_cat = 1 if edad < 35
replace edad_cat = 2 if edad >= 35 & edad < 60
replace edad_cat = 3 if edad >= 60 & edad < .

datos_vac %>%
  mutate(edad_cat = case_when(
                              edad < 35 ~ 1,
                              edad >= 35 & edad < 60 ~ 2,
                              edad >= 60 ~ 3,
                              TRUE ~ as.numeric(NA)))

Siempre debe indicarse qué hacer cuando la condición no se cumple!!

Crear una variable en base a una condición - Otro ejemplo






gen edad_cat = .
replace edad_cat = 1 if edad < 35
replace edad_cat = 2 if edad >= 35 & edad < 60
replace edad_cat = 3 if edad >= 60 & edad < .

datos_vac %>%
  mutate(edad_cat = case_when(
                              edad < 35 ~ 1,
                              edad >= 35 & edad < 60 ~ 2,
                              edad >= 60 ~ 3,
                              TRUE ~ as.numeric(NA)))

Unas notas acerca de case_when()


  • Función de apoyo a mutate() para crear variables según condiciones más complejas.
case_when(
  condición1 ~ resultado1, 
  condición2 ~ resultado2, 
  condición3 ~ resultado3
  )
  • Toda transformación o creación de variables en {dplyr} ocurre por mutate; por tanto, case_when()se utiliza dentro de un mutate
datos %>% 
  mutate(
    nueva_var = case_when(
      condición1 ~ resultado1,
      condición2 ~ resultado2, 
      condición3 ~ resultado3
    )
  )
  • Atajo de teclado para obtener ~: Alt + 1 + 2 + 6

Condición no cumplida en case_when()


  • Para indicar que todas las condiciones previas no se cumplen, se debe colocar TRUE:
datos %>% 
  mutate(
    nueva_var = case_when(
      condición1 ~ resultado1,
      condición2 ~ resultado2, 
      condición3 ~ resultado3, 
      TRUE ~ resultado_si_condición_no_se_cumple
    )
  )
  • Es muy importante siempre colocarla al final de cualquier conjunto de condiciones previas.

  • Cuando el resultado de no cumplirse es que se asigne valor perdido, es importante usar la función as.tipo_var() sobre el indicador de dato perdido NA.

    • Si es character: as.character(NA)

    • Si es numeric: as.numeric(NA)

case_when() en acción


  • Se quieren crear categorías de edad: “20-30”, “31-35” y “36-41”
datos_fase1 %>% 
  select(id, age) %>% 
  mutate(agecat = case_when(age >= 20 & age <= 30 ~ "20-30", 
                            age >= 31 & age <= 35 ~ "31-35", 
                            age >= 36 & age <= 41 ~ "36-41", 
                            TRUE ~ as.character(NA))
         ) 
    id age agecat
1    1  33  31-35
2    1  32  31-35
3    2  27  20-30
4    2  27  20-30
5    3  25  20-30
6    3  25  20-30
7    4  37  36-41
8    4  38  36-41
9    5  31  31-35
10   5  32  31-35
11   6  38  36-41
12   6  38  36-41
13   7  26  20-30
14   7  26  20-30
15   8  34  31-35
16   8  34  31-35
17   9  30  20-30
18   9  30  20-30
19  10  38  36-41
20  10  38  36-41
21  11  37  36-41
22  11  36  36-41
23  12  33  31-35
24  12  33  31-35
25  13  25  20-30
26  13  25  20-30
27  14  33  31-35
28  14  33  31-35
29  15  37  36-41
30  15  37  36-41
31  16  30  20-30
32  16  30  20-30
33  17  40  36-41
34  17  40  36-41
35  18  36  36-41
36  18  36  36-41
37  19  35  31-35
38  19  35  31-35
39  20  22  20-30
40  20  22  20-30
41  21  29  20-30
42  21  29  20-30
43  22  41  36-41
44  22  41  36-41
45  23  27  20-30
46  23  27  20-30
47  24  25  20-30
48  24  25  20-30
49  25  37  36-41
50  25  37  36-41
51  26  32  31-35
52  26  32  31-35
53  27  31  31-35
54  27  31  31-35
55  28  40  36-41
56  28  40  36-41
57  29  23  20-30
58  29  23  20-30
59  30  31  31-35
60  30  31  31-35
61  31  38  36-41
62  31  38  36-41
63  32  38  36-41
64  32  38  36-41
65  33  41  36-41
66  33  41  36-41
67  34  40  36-41
68  34  40  36-41
69  35  30  20-30
70  35  30  20-30
71  36  39  36-41
72  36  39  36-41
73  37  30  20-30
74  37  30  20-30
75  38  37  36-41
76  38  37  36-41
77  39  23  20-30
78  39  23  20-30
79  40  20  20-30
80  40  20  20-30
81  41  31  31-35
82  41  31  31-35
83  42  39  36-41
84  42  39  36-41
85  43  36  36-41
86  43  36  36-41
87  44  28  20-30
88  44  28  20-30
89  45  35  31-35
90  45  35  31-35
91  46  36  36-41
92  46  36  36-41
93  47  35  31-35
94  47  35  31-35
95  48  27  20-30
96  48  27  20-30
97  49  35  31-35
98  49  35  31-35
99  50  28  20-30
100 50  28  20-30
101 51  41  36-41
102 51  41  36-41
103 52  34  31-35
104 52  34  31-35
105 53  33  31-35
106 53  33  31-35
  • Se desea crear variable indicadora de inclusión en estudio: Solo pacientes sin pareja y que proceden de Callao, Carabayllo, Chorrillos o SJL son elegibles:
datos_fase1 %>% 
  mutate(elegible = case_when(
    married2 == "Without couple" & procedence %in% c("Callao", "Carabayllo", "Chorrillos", "SJL") ~ "Elegible", 
    TRUE ~ "No elegible"
    )
  ) 
    id     time   treat age    race    married       married2        procedence
1    1 Baseline Placebo  33 Mestiza     Single Without couple            Callao
2    1 3 months Placebo  32 Mestiza     Single Without couple            Callao
3    2 Baseline Dosis 2  27 Mestiza     Single Without couple       Santa Anita
4    2 3 months Dosis 2  27 Mestiza     Single Without couple       Santa Anita
5    3 Baseline Dosis 1  25 Mestiza     Single Without couple            Callao
6    3 3 months Dosis 1  25 Mestiza     Single Without couple            Callao
7    4 Baseline Dosis 1  37 Mestiza   Divorced Without couple            Callao
8    4 3 months Dosis 1  38 Mestiza   Divorced Without couple            Callao
9    5 Baseline Placebo  31 Mestiza     Single Without couple         La Molina
10   5 3 months Placebo  32 Mestiza     Single Without couple         La Molina
11   6 Baseline Placebo  38 Mestiza    Married    With couple        Los Olivos
12   6 3 months Placebo  38 Mestiza    Married    With couple        Los Olivos
13   7 Baseline Dosis 1  26 Mestiza    Married    With couple               SMP
14   7 3 months Dosis 1  26 Mestiza    Married    With couple               SMP
15   8 Baseline Placebo  34 Mestiza    Married    With couple        Carabayllo
16   8 3 months Placebo  34 Mestiza    Married    With couple        Carabayllo
17   9 Baseline Dosis 2  30 Mestiza     Single Without couple               SMP
18   9 3 months Dosis 2  30 Mestiza     Single Without couple               SMP
19  10 Baseline Placebo  38 Mestiza     Single Without couple      Pueblo Libre
20  10 3 months Placebo  38 Mestiza     Single Without couple      Pueblo Libre
21  11 Baseline Dosis 2  37 Mestiza    Married    With couple       El Agustino
22  11 3 months Dosis 2  36 Mestiza    Married    With couple       El Agustino
23  12 Baseline Dosis 2  33 Mestiza     Single Without couple             Lince
24  12 3 months Dosis 2  33 Mestiza     Single Without couple             Lince
25  13 Baseline Dosis 2  25 Mestiza    Married    With couple            Callao
26  13 3 months Dosis 2  25 Mestiza    Married    With couple            Callao
27  14 Baseline Placebo  33 Mestiza     Single Without couple         Surquillo
28  14 3 months Placebo  33 Mestiza     Single Without couple         Surquillo
29  15 Baseline Placebo  37 Mestiza    Married    With couple             Comas
30  15 3 months Placebo  37 Mestiza    Married    With couple             Comas
31  16 Baseline Dosis 1  30 Mestiza     Single Without couple        Los Olivos
32  16 3 months Dosis 1  30 Mestiza     Single Without couple        Los Olivos
33  17 Baseline Placebo  40 Mestiza    Widowed Without couple         Surquillo
34  17 3 months Placebo  40 Mestiza    Widowed Without couple         Surquillo
35  18 Baseline Placebo  36 Mestiza    Married    With couple        Miraflores
36  18 3 months Placebo  36 Mestiza    Married    With couple        Miraflores
37  19 Baseline Dosis 2  35 Mestiza     Single Without couple             Comas
38  19 3 months Dosis 2  35 Mestiza     Single Without couple             Comas
39  20 Baseline Placebo  22 Mestiza     Single Without couple         Surquillo
40  20 3 months Placebo  22 Mestiza     Single Without couple         Surquillo
41  21 Baseline Placebo  29 Mestiza    Married    With couple               SJL
42  21 3 months Placebo  29 Mestiza    Married    With couple               SJL
43  22 Baseline Dosis 1  41 Mestiza     Single Without couple        Chorrillos
44  22 3 months Dosis 1  41 Mestiza     Single Without couple        Chorrillos
45  23 Baseline Dosis 1  27 Mestiza     Single Without couple        Los Olivos
46  23 3 months Dosis 1  27 Mestiza     Single Without couple        Los Olivos
47  24 Baseline Dosis 1  25 Mestiza    Married    With couple        Los Olivos
48  24 3 months Dosis 1  25 Mestiza    Married    With couple        Los Olivos
49  25 Baseline Placebo  37 Mestiza    Married    With couple         San Borja
50  25 3 months Placebo  37 Mestiza    Married    With couple         San Borja
51  26 Baseline Placebo  32 Mestiza    Married    With couple           Chosica
52  26 3 months Placebo  32 Mestiza    Married    With couple           Chosica
53  27 Baseline Dosis 1  31 Mestiza     Single Without couple         San Borja
54  27 3 months Dosis 1  31 Mestiza     Single Without couple         San Borja
55  28 Baseline Dosis 2  40 Mestiza    Married    With couple               SJL
56  28 3 months Dosis 2  40 Mestiza    Married    With couple               SJL
57  29 Baseline Dosis 1  23 Mestiza     Single Without couple               SJL
58  29 3 months Dosis 1  23 Mestiza     Single Without couple               SJL
59  30 Baseline Dosis 1  31 Mestiza    Married    With couple             Comas
60  30 3 months Dosis 1  31 Mestiza    Married    With couple             Comas
61  31 Baseline Dosis 1  38 Mestiza     Single Without couple               VMT
62  31 3 months Dosis 1  38 Mestiza     Single Without couple               VMT
63  32 Baseline Dosis 2  38 Mestiza    Married    With couple               SMP
64  32 3 months Dosis 2  38 Mestiza    Married    With couple               SMP
65  33 Baseline Dosis 2  41 Mestiza    Married    With couple               SJL
66  33 3 months Dosis 2  41 Mestiza    Married    With couple               SJL
67  34 Baseline Dosis 1  40 Mestiza     Single Without couple             Bre;a
68  34 3 months Dosis 1  40 Mestiza     Single Without couple             Bre;a
69  35 Baseline Dosis 2  30 Mestiza    Married    With couple             Rimac
70  35 3 months Dosis 2  30 Mestiza    Married    With couple             Rimac
71  36 Baseline Dosis 1  39 Mestiza     Single Without couple         Magdalena
72  36 3 months Dosis 1  39 Mestiza     Single Without couple         Magdalena
73  37 Baseline Dosis 2  30 Mestiza     Single Without couple       El Agustino
74  37 3 months Dosis 2  30 Mestiza     Single Without couple       El Agustino
75  38 Baseline Dosis 2  37 Mestiza    Married    With couple             Lince
76  38 3 months Dosis 2  37 Mestiza    Married    With couple             Lince
77  39 Baseline Dosis 2  23 Mestiza     Single Without couple            Callao
78  39 3 months Dosis 2  23 Mestiza     Single Without couple            Callao
79  40 Baseline Placebo  20 Mestiza     Single Without couple               VES
80  40 3 months Placebo  20 Mestiza     Single Without couple               VES
81  41 Baseline Dosis 1  31 Mestiza    Married    With couple             Lince
82  41 3 months Dosis 1  31 Mestiza    Married    With couple             Lince
83  42 Baseline Dosis 2  39 Mestiza    Married    With couple        Los Olivos
84  42 3 months Dosis 2  39 Mestiza    Married    With couple        Los Olivos
85  43 Baseline Placebo  36 Mestiza     Single Without couple Villa el Salvador
86  43 3 months Placebo  36 Mestiza     Single Without couple Villa el Salvador
87  44 Baseline Dosis 1  28 Mestiza    Married    With couple             Lince
88  44 3 months Dosis 1  28 Mestiza    Married    With couple             Lince
89  45 Baseline Placebo  35 Mestiza    Married    With couple        Los Olivos
90  45 3 months Placebo  35 Mestiza    Married    With couple        Los Olivos
91  46 Baseline Dosis 2  36 Mestiza    Married    With couple       El Agustino
92  46 3 months Dosis 2  36 Mestiza    Married    With couple       El Agustino
93  47 Baseline Dosis 2  35 Mestiza     Single Without couple         Magdalena
94  47 3 months Dosis 2  35 Mestiza     Single Without couple         Magdalena
95  48 Baseline Placebo  27 Mestiza     Single Without couple            Callao
96  48 3 months Placebo  27 Mestiza     Single Without couple            Callao
97  49 Baseline Dosis 2  35 Mestiza    Married    With couple             Comas
98  49 3 months Dosis 2  35 Mestiza    Married    With couple             Comas
99  50 Baseline Dosis 2  28 Mestiza    Married    With couple               VMT
100 50 3 months Dosis 2  28 Mestiza    Married    With couple               VMT
101 51 Baseline Dosis 1  41 Mestiza    Married    With couple             Surco
102 51 3 months Dosis 1  41 Mestiza    Married    With couple             Surco
103 52 Baseline Dosis 1  34 Mestiza Cohabiting    With couple               SMP
104 52 3 months Dosis 1  34 Mestiza Cohabiting    With couple               SMP
105 53 Baseline Dosis 2  33 Mestiza     Single Without couple         La Molina
106 53 3 months Dosis 2  33 Mestiza     Single Without couple         La Molina
    weight height     e2    lh   fsh  prog    elegible
1     59.0    1.4  87.30  3.28  1.95 14.20    Elegible
2     59.9    1.3 210.05 26.85  8.83 12.95    Elegible
3     62.0    1.5 169.01  6.34  4.32  0.50 No elegible
4     62.1    1.6  99.91  5.77  1.70  9.61 No elegible
5     62.0    1.6  78.76 11.86  2.81 10.46    Elegible
6     60.0    1.6 155.04 10.14  4.51  5.04    Elegible
7     60.9    1.5  40.99  4.57  3.81  4.64    Elegible
8     61.4    1.5 109.03  7.29  2.39 11.73    Elegible
9     64.0    1.5  43.01  7.81  2.01 15.11 No elegible
10    58.1    1.6  56.05  9.15  3.66 11.46 No elegible
11    54.5    1.5  36.25  2.89  3.86 10.85 No elegible
12    53.9    1.5  44.67  5.87  3.09 12.03 No elegible
13    59.1    1.6  91.28  3.25  4.77  9.54 No elegible
14    58.6    1.6  91.34  3.31  4.83  9.60 No elegible
15    64.0    1.5  65.65  6.08  2.11 13.65 No elegible
16    59.0    1.5 134.04  3.99  1.53  9.53 No elegible
17    61.0    1.6  49.58 10.88  4.04  0.55 No elegible
18    63.1    1.7  46.28 17.58  4.65  0.08 No elegible
19    56.1    1.7 114.88 12.28  1.58  8.73 No elegible
20    54.9    1.5  71.47  1.57  2.40  3.68 No elegible
21    72.0    1.6  66.38  5.38  5.31 13.58 No elegible
22      NA     NA 110.32 32.02  3.55 19.10 No elegible
23    68.0    1.5 403.99 28.69  3.53 21.89 No elegible
24    68.0    1.5 178.96  7.02  1.67 16.46 No elegible
25    48.5    1.5  73.80  4.30  2.86 14.80 No elegible
26    54.0    1.5 130.15 15.85  5.78  6.95 No elegible
27    65.0    1.6  47.35  4.56  3.44  4.84 No elegible
28    64.5    1.6  59.20  6.15  2.06 10.00 No elegible
29    50.5    1.4 143.09 92.89  1.98 23.29 No elegible
30    50.1    1.5 110.18  8.28  5.26  5.82 No elegible
31    56.0    1.5  80.99  7.27  5.81  0.69 No elegible
32    55.9    1.5  73.12  3.82  3.55  3.80 No elegible
33    65.0    1.6  91.76  5.35  2.25  6.59 No elegible
34    65.0    1.6  73.00  5.37  2.10 11.20 No elegible
35    70.0    1.6 131.00 19.20  1.74 11.20 No elegible
36    71.0    1.7 261.03 49.33  2.17 14.63 No elegible
37    52.1    1.6 164.96  6.48  1.89  9.69 No elegible
38    53.0    1.5 165.02  6.54  1.95  9.75 No elegible
39    59.0    1.5  98.95  5.68  3.17  0.98 No elegible
40    59.0    1.5  33.15  3.45  5.39 12.65 No elegible
41    56.9    1.4  71.61  6.54  1.94  9.37 No elegible
42    57.1    1.5  29.55  1.02  6.72  0.41 No elegible
43    64.0    1.5  91.41  1.81  9.13  0.55    Elegible
44    63.0    1.5 111.98 32.58 21.18  0.22    Elegible
45    52.0    1.5  87.62  3.96  5.34  9.50 No elegible
46    51.0    1.5  93.67  3.19  5.62  7.25 No elegible
47    64.0    1.5 158.96  5.75  3.83 12.26 No elegible
48    64.0    1.5 120.03 13.13  4.66  3.45 No elegible
49    58.1    1.6  66.97  1.46  4.68  2.94 No elegible
50    54.0    1.6  93.10 35.40  6.80  2.21 No elegible
51    72.1    1.7 116.97  1.58  3.39  2.93 No elegible
52    68.5    1.6  21.15  1.85  3.50  5.88 No elegible
53    54.0    1.5  40.44  6.03  2.29 10.94 No elegible
54    55.0    1.5 140.00  3.76  2.63  9.77 No elegible
55    81.5    1.6 104.09  4.77  2.89 10.99 No elegible
56    70.1    1.6 150.07  8.07  4.37 12.02 No elegible
57    49.0    1.6  59.55  7.01  4.06  2.72    Elegible
58    50.1    1.6 129.97  2.94  1.55 16.57    Elegible
59    54.9    1.5  96.97  5.95  5.42  3.92 No elegible
60    56.0    1.5 160.40 24.10  2.03  7.58 No elegible
61    65.0    1.5  48.53 10.33  3.60  0.14 No elegible
62    65.0    1.5 124.00  8.26  6.43 10.90 No elegible
63    59.0    1.5 108.94  3.27  3.45 10.04 No elegible
64    58.0    1.5 122.97  5.63  5.37  9.79 No elegible
65    74.0    1.7  56.65 12.95  5.18 14.45 No elegible
66    74.5    1.7 219.99 15.09  7.18 12.99 No elegible
67    72.6    1.5 150.06 49.16  1.26 28.46 No elegible
68    76.0    1.6 170.49 46.19  2.61 11.30 No elegible
69    51.9    1.4  85.74  3.54  1.83  4.58 No elegible
70    53.0    1.4  46.48  3.38  4.65  4.21 No elegible
71    81.0    1.5 109.87  2.95  3.61  8.64 No elegible
72      NA     NA 103.95  2.06  1.57  8.99 No elegible
73    51.0    1.5  76.06  2.81  3.92  5.67 No elegible
74    51.4    1.4  45.26  1.17  2.41  5.86 No elegible
75    62.0    1.5  26.21  7.50  3.71 20.51 No elegible
76    62.5    1.5  81.91  3.02  1.99 10.41 No elegible
77    56.0    1.5  58.90  2.24  1.57 10.90    Elegible
78    56.0    1.5  75.49  2.64  7.96  0.91    Elegible
79    61.0    1.5  98.62  2.42  4.51  5.97 No elegible
80    60.0    1.5 267.99  2.39  0.82  1.47 No elegible
81    91.9    1.5  45.39  5.47  4.11  9.58 No elegible
82    92.1    1.7  58.67 14.77  3.67  3.71 No elegible
83    55.0    1.6  48.53  3.03  2.33 21.53 No elegible
84    56.0    1.6  21.40  1.98  4.18  0.63 No elegible
85    56.9    1.4 132.01  6.74  8.91  9.96 No elegible
86    57.6    1.6  39.65 13.25  5.41  0.26 No elegible
87    55.9    1.4 139.94 61.44  5.43 12.64 No elegible
88    57.0    1.6  27.29  4.31  4.00  9.04 No elegible
89    78.1    1.7 122.98  4.95  4.38 21.48 No elegible
90      NA     NA 366.07 14.87  5.49  7.42 No elegible
91    65.1    1.7 386.97 14.77  1.93  9.39 No elegible
92    65.5    1.7  91.74  5.64  5.25  9.43 No elegible
93    54.0    1.5  77.89  4.99  1.28  7.09 No elegible
94    53.0    1.5  77.32 24.92  4.63  7.90 No elegible
95    55.9    1.4 185.02  4.28  3.72  5.79    Elegible
96    54.9    1.5  28.87 17.47 12.07  1.45    Elegible
97    57.0    1.4  31.49  3.15  2.33 20.69 No elegible
98    56.8    1.5 110.16 12.16  3.96 11.54 No elegible
99    73.1    1.6 121.67 23.17  1.57 13.37 No elegible
100   71.7    1.4 217.02  4.27  2.66  1.47 No elegible
101   65.0    1.5  47.80 14.90  1.78 15.00 No elegible
102   64.9    1.5 120.17 21.07  4.30 16.29 No elegible
103   59.0    1.6 289.00 60.20  9.95 11.80 No elegible
104   54.0    1.5  75.78  4.38 14.23  9.96 No elegible
105   64.9    1.4 136.89  3.63  2.01 10.69 No elegible
106   66.0    1.5 217.00  4.26  5.36  0.20 No elegible

Nuestro turno



  • En la misma carpeta, con la data gapminder.

  • Cree columnas basados en condición



 

10:00

Otros verbos útiles para manejo de datos

Recodificar valores de variables con recode()


  • Cambia los nombres de las etiquetas de valores de las variables.

 

Larga

recode(.data = DATA, ...)

Abreviada

recode(DATA, ...)

Se estila usar %>%

DATA %>% 
  recode(...)

recode es el raro del grupo: primeo viejo nombre y luego nuevo nombre

Argumento Descripción
.data Data frame o extensión de data frame (por ejemplo, tibble).
... viejo_nombre = nuevo_nombre

recode() en acción


  • Cambiar los valores de married2 del inglés al español:
datos_fase1 %>% 
  mutate(married2 = recode(married2, 
                           "Without couple" = "Sin pareja", 
                           "With couple" = "Con pareja"))
    id     time   treat age    race    married   married2        procedence
1    1 Baseline Placebo  33 Mestiza     Single Sin pareja            Callao
2    1 3 months Placebo  32 Mestiza     Single Sin pareja            Callao
3    2 Baseline Dosis 2  27 Mestiza     Single Sin pareja       Santa Anita
4    2 3 months Dosis 2  27 Mestiza     Single Sin pareja       Santa Anita
5    3 Baseline Dosis 1  25 Mestiza     Single Sin pareja            Callao
6    3 3 months Dosis 1  25 Mestiza     Single Sin pareja            Callao
7    4 Baseline Dosis 1  37 Mestiza   Divorced Sin pareja            Callao
8    4 3 months Dosis 1  38 Mestiza   Divorced Sin pareja            Callao
9    5 Baseline Placebo  31 Mestiza     Single Sin pareja         La Molina
10   5 3 months Placebo  32 Mestiza     Single Sin pareja         La Molina
11   6 Baseline Placebo  38 Mestiza    Married Con pareja        Los Olivos
12   6 3 months Placebo  38 Mestiza    Married Con pareja        Los Olivos
13   7 Baseline Dosis 1  26 Mestiza    Married Con pareja               SMP
14   7 3 months Dosis 1  26 Mestiza    Married Con pareja               SMP
15   8 Baseline Placebo  34 Mestiza    Married Con pareja        Carabayllo
16   8 3 months Placebo  34 Mestiza    Married Con pareja        Carabayllo
17   9 Baseline Dosis 2  30 Mestiza     Single Sin pareja               SMP
18   9 3 months Dosis 2  30 Mestiza     Single Sin pareja               SMP
19  10 Baseline Placebo  38 Mestiza     Single Sin pareja      Pueblo Libre
20  10 3 months Placebo  38 Mestiza     Single Sin pareja      Pueblo Libre
21  11 Baseline Dosis 2  37 Mestiza    Married Con pareja       El Agustino
22  11 3 months Dosis 2  36 Mestiza    Married Con pareja       El Agustino
23  12 Baseline Dosis 2  33 Mestiza     Single Sin pareja             Lince
24  12 3 months Dosis 2  33 Mestiza     Single Sin pareja             Lince
25  13 Baseline Dosis 2  25 Mestiza    Married Con pareja            Callao
26  13 3 months Dosis 2  25 Mestiza    Married Con pareja            Callao
27  14 Baseline Placebo  33 Mestiza     Single Sin pareja         Surquillo
28  14 3 months Placebo  33 Mestiza     Single Sin pareja         Surquillo
29  15 Baseline Placebo  37 Mestiza    Married Con pareja             Comas
30  15 3 months Placebo  37 Mestiza    Married Con pareja             Comas
31  16 Baseline Dosis 1  30 Mestiza     Single Sin pareja        Los Olivos
32  16 3 months Dosis 1  30 Mestiza     Single Sin pareja        Los Olivos
33  17 Baseline Placebo  40 Mestiza    Widowed Sin pareja         Surquillo
34  17 3 months Placebo  40 Mestiza    Widowed Sin pareja         Surquillo
35  18 Baseline Placebo  36 Mestiza    Married Con pareja        Miraflores
36  18 3 months Placebo  36 Mestiza    Married Con pareja        Miraflores
37  19 Baseline Dosis 2  35 Mestiza     Single Sin pareja             Comas
38  19 3 months Dosis 2  35 Mestiza     Single Sin pareja             Comas
39  20 Baseline Placebo  22 Mestiza     Single Sin pareja         Surquillo
40  20 3 months Placebo  22 Mestiza     Single Sin pareja         Surquillo
41  21 Baseline Placebo  29 Mestiza    Married Con pareja               SJL
42  21 3 months Placebo  29 Mestiza    Married Con pareja               SJL
43  22 Baseline Dosis 1  41 Mestiza     Single Sin pareja        Chorrillos
44  22 3 months Dosis 1  41 Mestiza     Single Sin pareja        Chorrillos
45  23 Baseline Dosis 1  27 Mestiza     Single Sin pareja        Los Olivos
46  23 3 months Dosis 1  27 Mestiza     Single Sin pareja        Los Olivos
47  24 Baseline Dosis 1  25 Mestiza    Married Con pareja        Los Olivos
48  24 3 months Dosis 1  25 Mestiza    Married Con pareja        Los Olivos
49  25 Baseline Placebo  37 Mestiza    Married Con pareja         San Borja
50  25 3 months Placebo  37 Mestiza    Married Con pareja         San Borja
51  26 Baseline Placebo  32 Mestiza    Married Con pareja           Chosica
52  26 3 months Placebo  32 Mestiza    Married Con pareja           Chosica
53  27 Baseline Dosis 1  31 Mestiza     Single Sin pareja         San Borja
54  27 3 months Dosis 1  31 Mestiza     Single Sin pareja         San Borja
55  28 Baseline Dosis 2  40 Mestiza    Married Con pareja               SJL
56  28 3 months Dosis 2  40 Mestiza    Married Con pareja               SJL
57  29 Baseline Dosis 1  23 Mestiza     Single Sin pareja               SJL
58  29 3 months Dosis 1  23 Mestiza     Single Sin pareja               SJL
59  30 Baseline Dosis 1  31 Mestiza    Married Con pareja             Comas
60  30 3 months Dosis 1  31 Mestiza    Married Con pareja             Comas
61  31 Baseline Dosis 1  38 Mestiza     Single Sin pareja               VMT
62  31 3 months Dosis 1  38 Mestiza     Single Sin pareja               VMT
63  32 Baseline Dosis 2  38 Mestiza    Married Con pareja               SMP
64  32 3 months Dosis 2  38 Mestiza    Married Con pareja               SMP
65  33 Baseline Dosis 2  41 Mestiza    Married Con pareja               SJL
66  33 3 months Dosis 2  41 Mestiza    Married Con pareja               SJL
67  34 Baseline Dosis 1  40 Mestiza     Single Sin pareja             Bre;a
68  34 3 months Dosis 1  40 Mestiza     Single Sin pareja             Bre;a
69  35 Baseline Dosis 2  30 Mestiza    Married Con pareja             Rimac
70  35 3 months Dosis 2  30 Mestiza    Married Con pareja             Rimac
71  36 Baseline Dosis 1  39 Mestiza     Single Sin pareja         Magdalena
72  36 3 months Dosis 1  39 Mestiza     Single Sin pareja         Magdalena
73  37 Baseline Dosis 2  30 Mestiza     Single Sin pareja       El Agustino
74  37 3 months Dosis 2  30 Mestiza     Single Sin pareja       El Agustino
75  38 Baseline Dosis 2  37 Mestiza    Married Con pareja             Lince
76  38 3 months Dosis 2  37 Mestiza    Married Con pareja             Lince
77  39 Baseline Dosis 2  23 Mestiza     Single Sin pareja            Callao
78  39 3 months Dosis 2  23 Mestiza     Single Sin pareja            Callao
79  40 Baseline Placebo  20 Mestiza     Single Sin pareja               VES
80  40 3 months Placebo  20 Mestiza     Single Sin pareja               VES
81  41 Baseline Dosis 1  31 Mestiza    Married Con pareja             Lince
82  41 3 months Dosis 1  31 Mestiza    Married Con pareja             Lince
83  42 Baseline Dosis 2  39 Mestiza    Married Con pareja        Los Olivos
84  42 3 months Dosis 2  39 Mestiza    Married Con pareja        Los Olivos
85  43 Baseline Placebo  36 Mestiza     Single Sin pareja Villa el Salvador
86  43 3 months Placebo  36 Mestiza     Single Sin pareja Villa el Salvador
87  44 Baseline Dosis 1  28 Mestiza    Married Con pareja             Lince
88  44 3 months Dosis 1  28 Mestiza    Married Con pareja             Lince
89  45 Baseline Placebo  35 Mestiza    Married Con pareja        Los Olivos
90  45 3 months Placebo  35 Mestiza    Married Con pareja        Los Olivos
91  46 Baseline Dosis 2  36 Mestiza    Married Con pareja       El Agustino
92  46 3 months Dosis 2  36 Mestiza    Married Con pareja       El Agustino
93  47 Baseline Dosis 2  35 Mestiza     Single Sin pareja         Magdalena
94  47 3 months Dosis 2  35 Mestiza     Single Sin pareja         Magdalena
95  48 Baseline Placebo  27 Mestiza     Single Sin pareja            Callao
96  48 3 months Placebo  27 Mestiza     Single Sin pareja            Callao
97  49 Baseline Dosis 2  35 Mestiza    Married Con pareja             Comas
98  49 3 months Dosis 2  35 Mestiza    Married Con pareja             Comas
99  50 Baseline Dosis 2  28 Mestiza    Married Con pareja               VMT
100 50 3 months Dosis 2  28 Mestiza    Married Con pareja               VMT
101 51 Baseline Dosis 1  41 Mestiza    Married Con pareja             Surco
102 51 3 months Dosis 1  41 Mestiza    Married Con pareja             Surco
103 52 Baseline Dosis 1  34 Mestiza Cohabiting Con pareja               SMP
104 52 3 months Dosis 1  34 Mestiza Cohabiting Con pareja               SMP
105 53 Baseline Dosis 2  33 Mestiza     Single Sin pareja         La Molina
106 53 3 months Dosis 2  33 Mestiza     Single Sin pareja         La Molina
    weight height     e2    lh   fsh  prog
1     59.0    1.4  87.30  3.28  1.95 14.20
2     59.9    1.3 210.05 26.85  8.83 12.95
3     62.0    1.5 169.01  6.34  4.32  0.50
4     62.1    1.6  99.91  5.77  1.70  9.61
5     62.0    1.6  78.76 11.86  2.81 10.46
6     60.0    1.6 155.04 10.14  4.51  5.04
7     60.9    1.5  40.99  4.57  3.81  4.64
8     61.4    1.5 109.03  7.29  2.39 11.73
9     64.0    1.5  43.01  7.81  2.01 15.11
10    58.1    1.6  56.05  9.15  3.66 11.46
11    54.5    1.5  36.25  2.89  3.86 10.85
12    53.9    1.5  44.67  5.87  3.09 12.03
13    59.1    1.6  91.28  3.25  4.77  9.54
14    58.6    1.6  91.34  3.31  4.83  9.60
15    64.0    1.5  65.65  6.08  2.11 13.65
16    59.0    1.5 134.04  3.99  1.53  9.53
17    61.0    1.6  49.58 10.88  4.04  0.55
18    63.1    1.7  46.28 17.58  4.65  0.08
19    56.1    1.7 114.88 12.28  1.58  8.73
20    54.9    1.5  71.47  1.57  2.40  3.68
21    72.0    1.6  66.38  5.38  5.31 13.58
22      NA     NA 110.32 32.02  3.55 19.10
23    68.0    1.5 403.99 28.69  3.53 21.89
24    68.0    1.5 178.96  7.02  1.67 16.46
25    48.5    1.5  73.80  4.30  2.86 14.80
26    54.0    1.5 130.15 15.85  5.78  6.95
27    65.0    1.6  47.35  4.56  3.44  4.84
28    64.5    1.6  59.20  6.15  2.06 10.00
29    50.5    1.4 143.09 92.89  1.98 23.29
30    50.1    1.5 110.18  8.28  5.26  5.82
31    56.0    1.5  80.99  7.27  5.81  0.69
32    55.9    1.5  73.12  3.82  3.55  3.80
33    65.0    1.6  91.76  5.35  2.25  6.59
34    65.0    1.6  73.00  5.37  2.10 11.20
35    70.0    1.6 131.00 19.20  1.74 11.20
36    71.0    1.7 261.03 49.33  2.17 14.63
37    52.1    1.6 164.96  6.48  1.89  9.69
38    53.0    1.5 165.02  6.54  1.95  9.75
39    59.0    1.5  98.95  5.68  3.17  0.98
40    59.0    1.5  33.15  3.45  5.39 12.65
41    56.9    1.4  71.61  6.54  1.94  9.37
42    57.1    1.5  29.55  1.02  6.72  0.41
43    64.0    1.5  91.41  1.81  9.13  0.55
44    63.0    1.5 111.98 32.58 21.18  0.22
45    52.0    1.5  87.62  3.96  5.34  9.50
46    51.0    1.5  93.67  3.19  5.62  7.25
47    64.0    1.5 158.96  5.75  3.83 12.26
48    64.0    1.5 120.03 13.13  4.66  3.45
49    58.1    1.6  66.97  1.46  4.68  2.94
50    54.0    1.6  93.10 35.40  6.80  2.21
51    72.1    1.7 116.97  1.58  3.39  2.93
52    68.5    1.6  21.15  1.85  3.50  5.88
53    54.0    1.5  40.44  6.03  2.29 10.94
54    55.0    1.5 140.00  3.76  2.63  9.77
55    81.5    1.6 104.09  4.77  2.89 10.99
56    70.1    1.6 150.07  8.07  4.37 12.02
57    49.0    1.6  59.55  7.01  4.06  2.72
58    50.1    1.6 129.97  2.94  1.55 16.57
59    54.9    1.5  96.97  5.95  5.42  3.92
60    56.0    1.5 160.40 24.10  2.03  7.58
61    65.0    1.5  48.53 10.33  3.60  0.14
62    65.0    1.5 124.00  8.26  6.43 10.90
63    59.0    1.5 108.94  3.27  3.45 10.04
64    58.0    1.5 122.97  5.63  5.37  9.79
65    74.0    1.7  56.65 12.95  5.18 14.45
66    74.5    1.7 219.99 15.09  7.18 12.99
67    72.6    1.5 150.06 49.16  1.26 28.46
68    76.0    1.6 170.49 46.19  2.61 11.30
69    51.9    1.4  85.74  3.54  1.83  4.58
70    53.0    1.4  46.48  3.38  4.65  4.21
71    81.0    1.5 109.87  2.95  3.61  8.64
72      NA     NA 103.95  2.06  1.57  8.99
73    51.0    1.5  76.06  2.81  3.92  5.67
74    51.4    1.4  45.26  1.17  2.41  5.86
75    62.0    1.5  26.21  7.50  3.71 20.51
76    62.5    1.5  81.91  3.02  1.99 10.41
77    56.0    1.5  58.90  2.24  1.57 10.90
78    56.0    1.5  75.49  2.64  7.96  0.91
79    61.0    1.5  98.62  2.42  4.51  5.97
80    60.0    1.5 267.99  2.39  0.82  1.47
81    91.9    1.5  45.39  5.47  4.11  9.58
82    92.1    1.7  58.67 14.77  3.67  3.71
83    55.0    1.6  48.53  3.03  2.33 21.53
84    56.0    1.6  21.40  1.98  4.18  0.63
85    56.9    1.4 132.01  6.74  8.91  9.96
86    57.6    1.6  39.65 13.25  5.41  0.26
87    55.9    1.4 139.94 61.44  5.43 12.64
88    57.0    1.6  27.29  4.31  4.00  9.04
89    78.1    1.7 122.98  4.95  4.38 21.48
90      NA     NA 366.07 14.87  5.49  7.42
91    65.1    1.7 386.97 14.77  1.93  9.39
92    65.5    1.7  91.74  5.64  5.25  9.43
93    54.0    1.5  77.89  4.99  1.28  7.09
94    53.0    1.5  77.32 24.92  4.63  7.90
95    55.9    1.4 185.02  4.28  3.72  5.79
96    54.9    1.5  28.87 17.47 12.07  1.45
97    57.0    1.4  31.49  3.15  2.33 20.69
98    56.8    1.5 110.16 12.16  3.96 11.54
99    73.1    1.6 121.67 23.17  1.57 13.37
100   71.7    1.4 217.02  4.27  2.66  1.47
101   65.0    1.5  47.80 14.90  1.78 15.00
102   64.9    1.5 120.17 21.07  4.30 16.29
103   59.0    1.6 289.00 60.20  9.95 11.80
104   54.0    1.5  75.78  4.38 14.23  9.96
105   64.9    1.4 136.89  3.63  2.01 10.69
106   66.0    1.5 217.00  4.26  5.36  0.20

Manipulación de filas

Manipulación de filas

La selección de filas puede ser


  • De acuerdo a índice (posición de fila):

    • slice( )
  • De acuerdo a condición:

    • filter( )

Selección de filas basado en el índice


keep in 6

keep if _n == 6

slice(datos_vac, 6) # dplyr sin pipe

datos_vac %>% slice(6) # dplyr con pipe

datos_vac %>%
  slice(6) # pipe y buena práctica de estilo

Selección de filas basado en el índice


keep in 6

keep if _n == 6

slice(datos_vac, 6) # dplyr sin pipe

datos_vac %>% slice(6) # dplyr con pipe

datos_vac %>%
  slice(6) # pipe y buena práctica de estilo

Más sobre selección de filas por índices


keep in 15

keep if _n == 15

datos_vac %>%
 slice(15)

keep in 3/5

keep if _n == 3 | _n == 4 | _n == 5

datos_vac %>%
 slice(3:5)

keep if _n == 5 | _n == 8 | _n == 1

datos_vac %>%
 slice(c(5, 8, 1))

keep if _n != _N

datos_vac %>%
 slice(n( ))

drop in 15

drop if _n == 15

datos_vac %>%
 slice(-15)

Selección de filas basado en condición


keep if sexo == “Male”

filter(datos_vac, sexo == “Male”) # dplyr sin pipe

datos_vac %>% filter(sexo == “Male”) # dplyr con pipe

datos_vac %>%
  filter(sexo == “Male”) # pipe y buena práctica de estilo

Filtrado de filas con filter()


  • La función filter() selecciona individuos que cumplen una condición lógica.

  • Se debe usar operadores booleanos para construir condiciones lógicas simples o complejas.

Larga

filter(.data = DATA, ...)

Abreviada

filter(DATA, ...)

Se estila usar %>%

DATA %>% 
  filter(...)
Argumento Descripción
.data Data frame o extensión de data frame (por ejemplo, tibble).
... Uno o más condiciones o pruebas que filter() evaluará en cada fila y seleccionará solo las condiciones que resulten verdaderas: TRUE.

Operadores lógicos con R


Operador Definición Operador Definición
< menor que A | B A o B
<= menor o igual que is.na(A) evalúa si A es NA
> mayor que !is.na(A) evalúa si A no es NA
>= mayor o igual que A %in% B evalúa si A está en B
== exactamente igual a !(A %in% B) evalúa si A no está en B
!= diferente de !A no A
A & B A y B

filter( ) en acción


  • Si se filtra solo para tener a los individuos en su medición basal:
datos_fase1_select %>% 
  filter(time == "Baseline")
Error in filter(., time == "Baseline"): objeto 'datos_fase1_select' no encontrado
  • Podemos querer filtrar a los individuos en la medición basal Y que sean placebo:
datos_fase1_select %>% 
  filter(time == "Baseline" & treat == "Placebo")
Error in filter(., time == "Baseline" & treat == "Placebo"): objeto 'datos_fase1_select' no encontrado
datos_fase1_select %>% 
  filter(time == "Baseline", treat == "Placebo")
Error in filter(., time == "Baseline", treat == "Placebo"): objeto 'datos_fase1_select' no encontrado
  • Podemos querer filtrar a los individuos en la medición basal O que sean placebo:
datos_fase1_select %>% 
  filter(time == "Baseline" | treat == "Placebo")
Error in filter(., time == "Baseline" | treat == "Placebo"): objeto 'datos_fase1_select' no encontrado
  • Si queremos solo las mujeres entre 34 y 38 años de edad:
datos_fase1_select %>% 
  filter(age >= 34 & age <= 38)
Error in filter(., age >= 34 & age <= 38): objeto 'datos_fase1_select' no encontrado
  • Si queremos a quienes son de Santa Anita, Callao, SMP o Carabayllo:
datos_fase1 %>% 
  filter(procedence == "Santa Anita" | procedence == "Callao" | procedence == "SMP")
   id     time   treat age    race    married       married2  procedence weight
1   1 Baseline Placebo  33 Mestiza     Single Without couple      Callao   59.0
2   1 3 months Placebo  32 Mestiza     Single Without couple      Callao   59.9
3   2 Baseline Dosis 2  27 Mestiza     Single Without couple Santa Anita   62.0
4   2 3 months Dosis 2  27 Mestiza     Single Without couple Santa Anita   62.1
5   3 Baseline Dosis 1  25 Mestiza     Single Without couple      Callao   62.0
6   3 3 months Dosis 1  25 Mestiza     Single Without couple      Callao   60.0
7   4 Baseline Dosis 1  37 Mestiza   Divorced Without couple      Callao   60.9
8   4 3 months Dosis 1  38 Mestiza   Divorced Without couple      Callao   61.4
9   7 Baseline Dosis 1  26 Mestiza    Married    With couple         SMP   59.1
10  7 3 months Dosis 1  26 Mestiza    Married    With couple         SMP   58.6
11  9 Baseline Dosis 2  30 Mestiza     Single Without couple         SMP   61.0
12  9 3 months Dosis 2  30 Mestiza     Single Without couple         SMP   63.1
13 13 Baseline Dosis 2  25 Mestiza    Married    With couple      Callao   48.5
14 13 3 months Dosis 2  25 Mestiza    Married    With couple      Callao   54.0
15 32 Baseline Dosis 2  38 Mestiza    Married    With couple         SMP   59.0
16 32 3 months Dosis 2  38 Mestiza    Married    With couple         SMP   58.0
17 39 Baseline Dosis 2  23 Mestiza     Single Without couple      Callao   56.0
18 39 3 months Dosis 2  23 Mestiza     Single Without couple      Callao   56.0
19 48 Baseline Placebo  27 Mestiza     Single Without couple      Callao   55.9
20 48 3 months Placebo  27 Mestiza     Single Without couple      Callao   54.9
21 52 Baseline Dosis 1  34 Mestiza Cohabiting    With couple         SMP   59.0
22 52 3 months Dosis 1  34 Mestiza Cohabiting    With couple         SMP   54.0
   height     e2    lh   fsh  prog
1     1.4  87.30  3.28  1.95 14.20
2     1.3 210.05 26.85  8.83 12.95
3     1.5 169.01  6.34  4.32  0.50
4     1.6  99.91  5.77  1.70  9.61
5     1.6  78.76 11.86  2.81 10.46
6     1.6 155.04 10.14  4.51  5.04
7     1.5  40.99  4.57  3.81  4.64
8     1.5 109.03  7.29  2.39 11.73
9     1.6  91.28  3.25  4.77  9.54
10    1.6  91.34  3.31  4.83  9.60
11    1.6  49.58 10.88  4.04  0.55
12    1.7  46.28 17.58  4.65  0.08
13    1.5  73.80  4.30  2.86 14.80
14    1.5 130.15 15.85  5.78  6.95
15    1.5 108.94  3.27  3.45 10.04
16    1.5 122.97  5.63  5.37  9.79
17    1.5  58.90  2.24  1.57 10.90
18    1.5  75.49  2.64  7.96  0.91
19    1.4 185.02  4.28  3.72  5.79
20    1.5  28.87 17.47 12.07  1.45
21    1.6 289.00 60.20  9.95 11.80
22    1.5  75.78  4.38 14.23  9.96
datos_fase1 %>% 
  filter(procedence %in% c("Santa Anita", "Callao", "SMP"))
   id     time   treat age    race    married       married2  procedence weight
1   1 Baseline Placebo  33 Mestiza     Single Without couple      Callao   59.0
2   1 3 months Placebo  32 Mestiza     Single Without couple      Callao   59.9
3   2 Baseline Dosis 2  27 Mestiza     Single Without couple Santa Anita   62.0
4   2 3 months Dosis 2  27 Mestiza     Single Without couple Santa Anita   62.1
5   3 Baseline Dosis 1  25 Mestiza     Single Without couple      Callao   62.0
6   3 3 months Dosis 1  25 Mestiza     Single Without couple      Callao   60.0
7   4 Baseline Dosis 1  37 Mestiza   Divorced Without couple      Callao   60.9
8   4 3 months Dosis 1  38 Mestiza   Divorced Without couple      Callao   61.4
9   7 Baseline Dosis 1  26 Mestiza    Married    With couple         SMP   59.1
10  7 3 months Dosis 1  26 Mestiza    Married    With couple         SMP   58.6
11  9 Baseline Dosis 2  30 Mestiza     Single Without couple         SMP   61.0
12  9 3 months Dosis 2  30 Mestiza     Single Without couple         SMP   63.1
13 13 Baseline Dosis 2  25 Mestiza    Married    With couple      Callao   48.5
14 13 3 months Dosis 2  25 Mestiza    Married    With couple      Callao   54.0
15 32 Baseline Dosis 2  38 Mestiza    Married    With couple         SMP   59.0
16 32 3 months Dosis 2  38 Mestiza    Married    With couple         SMP   58.0
17 39 Baseline Dosis 2  23 Mestiza     Single Without couple      Callao   56.0
18 39 3 months Dosis 2  23 Mestiza     Single Without couple      Callao   56.0
19 48 Baseline Placebo  27 Mestiza     Single Without couple      Callao   55.9
20 48 3 months Placebo  27 Mestiza     Single Without couple      Callao   54.9
21 52 Baseline Dosis 1  34 Mestiza Cohabiting    With couple         SMP   59.0
22 52 3 months Dosis 1  34 Mestiza Cohabiting    With couple         SMP   54.0
   height     e2    lh   fsh  prog
1     1.4  87.30  3.28  1.95 14.20
2     1.3 210.05 26.85  8.83 12.95
3     1.5 169.01  6.34  4.32  0.50
4     1.6  99.91  5.77  1.70  9.61
5     1.6  78.76 11.86  2.81 10.46
6     1.6 155.04 10.14  4.51  5.04
7     1.5  40.99  4.57  3.81  4.64
8     1.5 109.03  7.29  2.39 11.73
9     1.6  91.28  3.25  4.77  9.54
10    1.6  91.34  3.31  4.83  9.60
11    1.6  49.58 10.88  4.04  0.55
12    1.7  46.28 17.58  4.65  0.08
13    1.5  73.80  4.30  2.86 14.80
14    1.5 130.15 15.85  5.78  6.95
15    1.5 108.94  3.27  3.45 10.04
16    1.5 122.97  5.63  5.37  9.79
17    1.5  58.90  2.24  1.57 10.90
18    1.5  75.49  2.64  7.96  0.91
19    1.4 185.02  4.28  3.72  5.79
20    1.5  28.87 17.47 12.07  1.45
21    1.6 289.00 60.20  9.95 11.80
22    1.5  75.78  4.38 14.23  9.96

Nuestro turno



  • En la misma carpeta, con la data gapminder.

  • Seleccione filas basados en indices.

  • Seleccione filas basados en condiciones.



 

10:00

Manejo de metadatos

Manejo de metadatos

Etiquetar variables con set_var_labels()

  • La función set_var_labels() del paquete labelled() es muy útil para etiquetar columnas.

  • Los datos deben tener metadatos que permitan ser legibles por el ser humano.

  • Primero instalar y cargar paquete:

library(labelled)
  • Es preferible usar esta función al final de todo el proceso de limpieza de datos.

Larga

set_var_labels(.data = DATA, ...)

Abreviada

set_var_labels(DATA, ...)

Se estila usar %>%

DATA %>% 
  set_var_labels(...)
Argumento Descripción
.data Data frame o extensión de data frame (por ejemplo, tibble).
... variable = 'nueva etiqueta'

set_var_labels() en acción

  • ¿Qué significan pas, pad y pam?

  • Difícil de saber sin una etiqueta

  • Usando set_variable_labels()
datos2 <- datos %>% 
  set_variable_labels(
    pam = "Presión Arterial Media", 
    pas = "Presión Arterial Sistólica", 
    pad = "Presión Arterial Diastólica"
  )

Pipeline: podemos anidar con %>% varias tareas


  • Esto se denomina establecer un pipeline:
datos_fase1 %>% 
  filter(age > 35) %>% # Primero filtro por age
  select(id, time, treat, race, age) %>% # Luego me quedo solo con estas 5 columnas
  arrange(age) # Por último, reordenamos por edad
   id     time   treat    race age
1  11 3 months Dosis 2 Mestiza  36
2  18 Baseline Placebo Mestiza  36
3  18 3 months Placebo Mestiza  36
4  43 Baseline Placebo Mestiza  36
5  43 3 months Placebo Mestiza  36
6  46 Baseline Dosis 2 Mestiza  36
7  46 3 months Dosis 2 Mestiza  36
8   4 Baseline Dosis 1 Mestiza  37
9  11 Baseline Dosis 2 Mestiza  37
10 15 Baseline Placebo Mestiza  37
11 15 3 months Placebo Mestiza  37
12 25 Baseline Placebo Mestiza  37
13 25 3 months Placebo Mestiza  37
14 38 Baseline Dosis 2 Mestiza  37
15 38 3 months Dosis 2 Mestiza  37
16  4 3 months Dosis 1 Mestiza  38
17  6 Baseline Placebo Mestiza  38
18  6 3 months Placebo Mestiza  38
19 10 Baseline Placebo Mestiza  38
20 10 3 months Placebo Mestiza  38
21 31 Baseline Dosis 1 Mestiza  38
22 31 3 months Dosis 1 Mestiza  38
23 32 Baseline Dosis 2 Mestiza  38
24 32 3 months Dosis 2 Mestiza  38
25 36 Baseline Dosis 1 Mestiza  39
26 36 3 months Dosis 1 Mestiza  39
27 42 Baseline Dosis 2 Mestiza  39
28 42 3 months Dosis 2 Mestiza  39
29 17 Baseline Placebo Mestiza  40
30 17 3 months Placebo Mestiza  40
31 28 Baseline Dosis 2 Mestiza  40
32 28 3 months Dosis 2 Mestiza  40
33 34 Baseline Dosis 1 Mestiza  40
34 34 3 months Dosis 1 Mestiza  40
35 22 Baseline Dosis 1 Mestiza  41
36 22 3 months Dosis 1 Mestiza  41
37 33 Baseline Dosis 2 Mestiza  41
38 33 3 months Dosis 2 Mestiza  41
39 51 Baseline Dosis 1 Mestiza  41
40 51 3 months Dosis 1 Mestiza  41

Nuestro turno



  • En la misma carpeta con los datos gapminder.

  • Agregue etiquetas de variable.

  • Cree un pipeline.



 

Hagamos una pausa


Tomemos un descanso de 5 minutos

Estire las piernas

Deje de ver las pantallas

… cualquier , las del celular también.

05:00

¡Gracias!
¿Preguntas?




https://github.com/psotob91

percys1991@gmail.com